/*
 *
 * Copyright (C) 2008 Jose Javier García Zornoza.
 *
 * Este es un programa libre; puedes distribuirlo y/o modificarlo bajo
 * los términos de la versión 2 (o cualquier versión posterior) de la Licencia
 * Pública General de la Fundación de Software Libre.
 * Este programa se distribuye con la esperanza  de poder ser útil, pero sin
 * NINGUNA GARANTIA; tampoco la garantía implícita de COMERCIALIZACION o DEDICACIÓN
 * A UN PROPOSITO PARTICULAR. Ver la licencia GNU GPL para más detalles.
 * Deberías haber recibido una copia de la licencia GNU GPL con este programa;
 * en caso contrario puedes obtener una copia visitando el sitio web www.fsf.org
 * o escribiendo a la Fundación de Software Libre, Inc., 59 Temple
 * Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */
package org.gruposp2p.dnie.xml.jaxb;

import java.io.File;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.gruposp2p.dnie.model.SignedDocument;
import org.w3c.dom.Document;

/**
 *
 * @author jj
 */
public class DocumentMarshaller {

    private static Logger logger =
            LoggerFactory.getLogger(DocumentMarshaller.class);
    
    public static void marshallObject (Object objectToMarshall, File file)
            throws JAXBException {
        JAXBContext jc = JAXBContext.newInstance("org.gruposp2p.dnie.xml.jaxb");
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
        if (objectToMarshall instanceof SignedDocument) {
                    marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper",
                new NamespacePrefixMapperImpl());
        }

        marshaller.marshal( objectToMarshall, System.out );
        marshaller.marshal(objectToMarshall, file);
    }

    public static String marshallObjectToString (Object objectToMarshall)
            throws JAXBException {
        JAXBContext jc = JAXBContext.newInstance("org.gruposp2p.dnie.xml.jaxb");
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
        if (objectToMarshall instanceof SignedDocument) {
                    marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper",
                new NamespacePrefixMapperImpl());
        }
        StringWriter stringWriter = new StringWriter();
        marshaller.marshal( objectToMarshall, stringWriter);
        return stringWriter.toString();
    }

    public static Document marshallObjectToDocument (Object objectToMarshall)
            throws JAXBException, ParserConfigurationException {
        JAXBContext jc = JAXBContext.newInstance("org.gruposp2p.dnie.xml.jaxb");
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
        if (objectToMarshall instanceof SignedDocument) {
                    marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper",
                new NamespacePrefixMapperImpl());
        }
        DocumentBuilder builder =
                DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.newDocument();
        marshaller.marshal(objectToMarshall, document);
        return document;
    }
    
}
